<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>

    function fn(a, b) {
        // var a = 1;
        // var b = 2;
        return a + b;
    }

    // 函数内 嵌套 另一个函数  => 缺点: 定死了
    // function doSomeThing() {
    //     //  函数在没有调用时 也是存在内存当中的 (函数名 => 变量名)
    //     function sing() {
    //         console.log("唱歌");
    //     }
    //     function dance() {
    //         console.log("跳舞");
    //     }
    //     function rap() {
    //         console.log("rap");
    //     }

    //     sing();
    //     dance();

    // }


    // 回调函数  => 把函数当成参数传递到另一个函数中  (提前决定好要执行的内容,在另一个函数中调用时执行  => 锦囊妙计)
    // 解析:另一个函数中有形参接收该函数,引用同一片内存空间, 通过形参调用函数 等价于调用原函数
    /* function sing() {
        console.log("唱歌");
    }
    function dance() {
        console.log("跳舞");
    }
    function rap() {
        console.log("rap");
    }

    function doSomeThing(callback) { // callback => 形式参数 => 要求接收一个函数
        //  函数在没有调用时 也是存在内存当中的 (函数名 => 变量名)
        // callback = sing => 函数也是一个对象 (引用类型)

        if (callback && typeof callback == "function") {
            callback();
        }
    }


    doSomeThing(sing);
    doSomeThing(dance);
    doSomeThing(rap);
    doSomeThing(function () {
        console.log("学习");
    }); */

    // ----------------------------------------------------------------

    // debugger;

    function sing(arg) {
        console.log("唱歌", arg);
    }
    function dance(arg) {
        console.log("跳舞", arg);
    }
    function rap(arg) {
        console.log("rap", arg);
    }

    function doSomeThing(callback, params) { // callback => 形式参数 => 要求接收一个函数 
        //  函数在没有调用时 也是存在内存当中的 (函数名 => 变量名)
        // callback = sing => 函数也是一个对象 (引用类型)

        if (callback && typeof callback == "function") {
            callback(params);
        }
    }


    doSomeThing(sing, "小苹果");
    doSomeThing(dance, "小天鹅");
    doSomeThing(rap, "只因你太美");
    doSomeThing(function (arg) {
        console.log("学习", arg);
    }, "javascript");




    // function add(a, b) { }
    // function reduce(a, b) { }
    // function multiply(a, b) { }
    // function divide(a, b) { }
    // function mod(a, b) { }

    // function calc(callback, a, b) {

    // }



</script>

</html>